package com.showgood.socket {
	import com.showgood.vo.BaseVO;
	import com.showgood.vo.VoFactory;
	import flash.utils.ByteArray;
	/**
	 * 数组型VO对象的命令的封装
	 * @author bianpeng
	 */
	public class ArraySocketCommand extends AbstractSocketCommand {
		
		private var _data:Vector.<BaseVO>;
		
		public function ArraySocketCommand(message:int, stamp:int, data:Vector.<BaseVO> = null) {
			super(message, stamp, SocketConsts.FLAG_ARRAY_VO);
			_data = data;
		}
		private function doPack(byteArray:ByteArray): void {
			byteArray.writeInt(this.stamp());
			byteArray.writeShort(this.flag());
			byteArray.writeInt(this.message());
			if (_data != null && _data.length > 0) {
				byteArray.writeShort(_data.length);
				byteArray.writeInt(_data[0].vid);
				for (var i:int = 0; i < _data.length; ++i) {
					_data[0].pack(byteArray);
				}
			}
			else {
				byteArray.writeShort(0);
			}
		}
		override public function pack(byteArray:ByteArray):void {
			var bytes:ByteArray = new ByteArray();
			doPack(bytes);
			byteArray.writeShort(bytes.length);
			byteArray.writeBytes(bytes);
		}
		override public function unpack(byteArray:ByteArray):void {
			this.setMessage(byteArray.readInt());
			var size:int = byteArray.readShort() & 0xffff;
			if (size > 0) {
				_data = new Vector.<BaseVO>();
				var id:int = byteArray.readInt();
				for (var i:int = 0; i < size; ++i) {
					var vo:BaseVO = VoFactory.instance.create(id);
					vo.unpack(byteArray);
					_data.push(vo);
				}
			}
		}
		public function get data():Vector.<BaseVO> {
			return _data;
		}
	}

}


